package day11;

/**
 * @author aiPlusPlus
 * @version 1.0
 * @date 2023/4/11 18:50
 */

/**
 * 力扣嘉年华同样准备了纪念品展位，参观者只需要集齐 的 张字母卡片即可获得力扣纪念章。helloleetcode13
 *
 * 在展位上有一些由字母卡片拼成的单词， 表示第 个单词的第 个字母。words[i][j]ij
 *
 * 你可以从这些单词中取出一些卡片，但每次拿取卡片都需要消耗游戏代币，规则如下：
 *
 * 从一个单词中取一个字母所需要的代币数量，为该字母左边和右边字母数量之积
 *
 * 可以从一个单词中多次取字母，每个字母仅可被取一次
 *
 * 例如：从 中取出字母 ，需要消耗代币 ，字母取出后单词变为 ； 再从中取出字母 ，需要消耗代币 ，字母取出后单词变为 ；examplea2*4=8exmplem2*3=6exple
 *
 * 请返回取得 这些字母需要消耗代币的 最少 数量。如果无法取得，返回 。helloleetcode-1
 *
 * 注意：
 *
 * 取出字母的顺序没有要求
 * 取出的所有字母恰好可以拼成 helloleetcode
 * 示例 1：
 *
 * 输入：words = ["hold","engineer","cost","level"]
 *
 * 输出：5
 *
 * 解释：最优方法为： 从 依次取出 、、、， 代价均为 从 依次取出第 个 与最后一个 ， 代价为 和 从 取出 、、， 代价均为 从 依次取出 、、、， 代价均为 所有字母恰好可以拼成 ，因此最小的代价为 holdhold0engineer1ee05*1=5costcot0levelllee0helloleetcode5
 *
 * 示例 2：
 *
 * 输入：words = ["hello","leetcode"]
 *
 * 输出：0
 */
public class Solution3 {
    public int Leetcode(String[] words) {
        int count = 0;
        for (int i = 0; i < words.length - 1; i++) {
            String word = words[i];
            String nextWord = words[i + 1];
            for (int j = 0; j < word.length(); j++) {
                char c = word.charAt(j);
                int index = nextWord.indexOf(c);
                if (index == -1) {
                    return -1;
                }
                nextWord = nextWord.substring(index + 1);
                count += index * (word.length() - j - 1);
            }
        }
        return count;
    }
}
